var gulp = require('gulp'),
    minifyCss = require('gulp-minify-css'),
    jshint = require('gulp-jshint'),
    uglify = require('gulp-uglify'),
    clean = require('gulp-clean'),
    rev = require('gulp-rev'),
    concat = require('gulp-concat'),
    revReplace = require('gulp-rev-replace'),
    useref = require('gulp-useref'),
    revCollector = require('gulp-rev-collector'),
    imagemin = require('gulp-imagemin');           // 压缩图片

// 删除清空文件夹，避免资源冗余
gulp.task('clean',function(){
    return gulp.src('dest',{read:false}).pipe(clean());
});

// css文件压缩，更改版本号，并通过rev.manifest将对应的版本号用json表示出来
gulp.task('css',function(){
    return gulp.src('src/css/**/*.css')
    //.pipe( concat('wap.min.css') )
    .pipe(minifyCss())
    .pipe(rev()) // 加版本号
    .pipe(gulp.dest('dest/css/')) // 压缩css
    .pipe(rev.manifest())
    .pipe(gulp.dest('dest/rev/css'));
});

// 压缩图片
gulp.task('imagemin', function () {
    return gulp.src('src/img/**/*.{png,jpg,gif,ico}')
        .pipe(imagemin())
        .pipe(rev()) // 加版本号
        .pipe(gulp.dest('dest/img'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('dest/rev/img'));
});

// js文件压缩，更改版本号，并通过rev.manifest将对应的版本号用json表示出
gulp.task('js',function(){
    return gulp.src('src/js/**/*.js')
    //.pipe( concat('wap.min.js') )
    .pipe(jshint())
    .pipe(uglify({
        //mangle: true,//类型：Boolean 默认：true 是否修改变量名
        mangle: { except: ['require', 'exports', 'module', '$'] }//排除混淆关键字
    }))
    .pipe(rev())
    .pipe(gulp.dest('dest/js/'))
    .pipe(rev.manifest())
    .pipe(gulp.dest('dest/rev/js'));
});

// 通过hash来精确定位到html模板中需要更改的部分,然后将修改成功的文件生成到指定目录
gulp.task('rev', ['clean','css','js','imagemin'], function(){
    return gulp.src(['dest/rev/**/*.json','src/html/**/*.html'])
    .pipe( revCollector() ) // 如果修改了内容再次压缩，再次执行rev命令发现.html文件里面文件名并未并成功替换 revCollector({replaceReved:true}) //一定要加上这一句，不然不会替换掉上一次的值
    .pipe(gulp.dest('dest/html/'));
});

// 合并html页面内引用的静态资源文件
gulp.task('html', function () {
    return gulp.src('src/html/guidePage.html')
    .pipe(useref()) // 合并html里面的css、js文件
    // .pipe(rev()) // 给html 文件添加版本号
    // .pipe(revReplace())
    .pipe(gulp.dest('dest/html/'));
});

gulp.task('default',['rev']);